/***************************************************************************\
*
* Module Name: PMGPI.H
*
* OS/2 Presentation Manager GPI constants, types and function declarations
*
* Copyright (c) 1989-1990, Microsoft Corporation.  All rights reserved.
*
* =============================================================================
*
* The following symbols are used in this file for conditional sections.
*
*   INCL_GPI                Include all of the GPI
*   INCL_GPICONTROL         Basic PS control
*   INCL_GPICORRELATION     Picking, Boundary and Correlation
*   INCL_GPISEGMENTS        Segment Control and Drawing
*   INCL_GPISEGEDITING      Segment Editing via Elements
*   INCL_GPITRANSFORMS      Transform and Transform Conversion
*   INCL_GPIPATHS           Paths and Clipping with Paths
*   INCL_GPILOGCOLORTABLE   Logical Color Tables
*   INCL_GPIPRIMITIVES      Drawing Primitives and Primitive Attributes
*   INCL_GPILCIDS           Phyical and Logical Fonts with Lcids
*   INCL_GPIBITMAPS         Bitmaps and Pel Operations
*   INCL_GPIREGIONS         Regions and Clipping with Regions
*   INCL_GPIMETAFILES       Metafiles
*   INCL_GPIDEFAULTS        Default Primitive Attributes
*   INCL_GPIERRORS          defined if INCL_ERRORS defined
*
* There is a symbol used in this file called INCL_DDIDEFS. This is used to
* include only the definitions for the DDI. The programmer using the GPI
* can ignore this symbol
*
* There is a symbol used in this file called INCL_SAADEFS. This is used to
* include only the definitions for the SAA. The programmer using the GPI
* can ignore this symbol
*
\***************************************************************************/

#ifdef INCL_GPI /* include whole of the GPI */
    #define INCL_GPICONTROL
    #define INCL_GPICORRELATION
    #define INCL_GPISEGMENTS
    #define INCL_GPISEGEDITING
    #define INCL_GPITRANSFORMS
    #define INCL_GPIPATHS
    #define INCL_GPILOGCOLORTABLE
    #define INCL_GPIPRIMITIVES
    #define INCL_GPILCIDS
    #define INCL_GPIBITMAPS
    #define INCL_GPIREGIONS
    #define INCL_GPIMETAFILES
    #define INCL_GPIDEFAULTS
#endif /* INCL_GPI */

#ifdef INCL_ERRORS /* if errors are required then allow GPI errors */
    #define INCL_GPIERRORS
#endif /* INCL_ERRORS */

#ifdef INCL_DDIDEFS /* if only DDI required then enable DDI part of GPI */
    #define INCL_GPITRANSFORMS
    #define INCL_GPIPATHS
    #define INCL_GPILOGCOLORTABLE
    #define INCL_GPIPRIMITIVES
    #define INCL_GPILCIDS
    #define INCL_GPIBITMAPS
    #define INCL_GPIREGIONS
    #define INCL_GPIERRORS
#endif /* INCL_DDIDEFS */

#ifdef INCL_SAADEFS /* if only SAA required then enable SAA part of GPI */
    #define INCL_GPICONTROL
    #define INCL_GPICORRELATION
    #define INCL_GPISEGMENTS
    #define INCL_GPISEGEDITING
    #define INCL_GPITRANSFORMS
    #define INCL_GPIPATHS
    #define INCL_GPILOGCOLORTABLE
    #define INCL_GPIPRIMITIVES
    #define INCL_GPILCIDS
    #define INCL_GPIBITMAPS
    #define INCL_GPIREGIONS
    #define INCL_GPIMETAFILES
    #define INCL_GPIERRORS
#endif /* INCL_SAADEFS */

#ifndef GPI_COMMON_INCLUDED
#define GPI_COMMON_INCLUDED

/* General GPI return values */
#define GPI_ERROR			0L
#define GPI_OK				1L
#define GPI_ALTERROR		      (-1L)

/* fixed point number - implicit binary point between 2 and 3 hex digits */
typedef  LONG FIXED;	/* fx	*/
typedef  FIXED FAR *PFIXED;

/* fixed point number - implicit binary point between 1st and 2nd hex digits */
typedef  USHORT FIXED88;  /* fx88 */

/* fixed point signed number - implicit binary point between bits 14 and 13. */
/*			       Bit 15 is the sign bit.			     */
/*			       Thus 1.0 is represented by 16384 (0x4000)     */
/*			       and -1.0 is represented by -16384 (0xc000)    */
typedef  USHORT FIXED114; /* fx114 */

/* make FIXED number from SHORT integer part and USHORT fractional part */
#define MAKEFIXED(intpart,fractpart) MAKELONG(fractpart,intpart)
/* extract fractional part from a fixed quantity */
#define FIXEDFRAC(fx)		(LOUSHORT(fx))
/* extract integer part from a fixed quantity */
#define FIXEDINT(fx)		((SHORT)HIUSHORT(fx))

/* structure for size parameters e.g. for GpiCreatePS */
typedef struct _SIZEL { 	/* sizl */
	LONG cx;
	LONG cy;
} SIZEL;
typedef SIZEL FAR *PSIZEL;

/* return code on GpiQueryLogColorTable, GpiQueryRealColors and GpiQueryPel */

#define CLR_NOINDEX		(-254L)
#endif /* GPI_COMMON_INCLUDED */

#if ((defined(INCL_GPICONTROL) || !defined(INCL_NOCOMMON)) && !defined(INCL_GPICONTROL_INCLUDED))

/* units for GpiCreatePS and others */
#define PU_ARBITRARY		0x0004L
#define PU_PELS 		0x0008L
#define PU_LOMETRIC		0x000CL
#define PU_HIMETRIC		0x0010L
#define PU_LOENGLISH		0x0014L
#define PU_HIENGLISH		0x0018L
#define PU_TWIPS		0x001CL

/* format for GpiCreatePS */
#define GPIF_DEFAULT		     0L
#define GPIF_SHORT		0x0100L
#define GPIF_LONG		0x0200L


/* PS type for GpiCreatePS */
#define GPIT_NORMAL		     0L
#define GPIT_MICRO		0x1000L


/* implicit associate flag for GpiCreatePS */
#define GPIA_NOASSOC			0L
#define GPIA_ASSOC		   0x4000L

#ifndef INCL_SAADEFS
/* return error for GpiQueryDevice */
#define HDC_ERROR		((HDC)-1L)
#endif /* no INCL_SAADEFS */

/* common GPICONTROL functions */
HPS   APIENTRY GpiCreatePS(HAB hab, HDC hdc, PSIZEL psizlSize, ULONG flOptions);
BOOL  APIENTRY GpiDestroyPS(HPS hps);
BOOL  APIENTRY GpiAssociate(HPS hps, HDC hdc);
BOOL  APIENTRY GpiRestorePS(HPS hps, LONG lPSid);
LONG  APIENTRY GpiSavePS(HPS hps);
BOOL  APIENTRY GpiErase(HPS hps);

#ifndef INCL_SAADEFS
HDC  APIENTRY GpiQueryDevice(HPS);
#endif /* no INCL_SAADEFS */

#endif /* common GPICONTROL */
#if (defined(INCL_GPICONTROL) && !defined(INCL_GPICONTROL_INCLUDED))
#define INCL_GPICONTROL_INCLUDED

/* options for GpiResetPS */
#define GRES_ATTRS		0x0001L
#define GRES_SEGMENTS		0x0002L
#define GRES_ALL		0x0004L

/* option masks for PS options used by GpiQueryPs */
#define PS_UNITS		0x00FCL
#define PS_FORMAT		0x0F00L
#define PS_TYPE 		0x1000L
#define PS_MODE 		0x2000L
#define PS_ASSOCIATE		0x4000L
#define PS_NORESET		0x8000L


/* error context returned by GpiErrorSegmentData */
#define GPIE_SEGMENT		0L
#define GPIE_ELEMENT		1L
#define GPIE_DATA		2L

#ifndef INCL_SAADEFS

/* control parameter for GpiSetDrawControl */
#define DCTL_ERASE		1L
#define DCTL_DISPLAY		2L
#define DCTL_BOUNDARY		3L
#define DCTL_DYNAMIC		4L
#define DCTL_CORRELATE		5L

/* constants for GpiSet/QueryDrawControl */
#define DCTL_ERROR		(-1L)
#define DCTL_OFF		0L
#define DCTL_ON 		1L

/* constants for GpiSet/QueryStopDraw */
#define SDW_ERROR		(-1L)
#define SDW_OFF 		0L
#define SDW_ON			1L

#endif /* no INCL_SAADEFS */

/* drawing for GpiSet/QueryDrawingMode */
#define DM_ERROR		0L
#define DM_DRAW 		1L
#define DM_RETAIN		2L
#define DM_DRAWANDRETAIN	3L

/*** other GPICONTROL functions */
BOOL APIENTRY GpiResetPS(HPS hps, ULONG flOptions);

#ifndef INCL_SAADEFS

BOOL APIENTRY GpiSetPS(HPS hps, PSIZEL psizlsize, ULONG flOptions);

#endif /* no INCL_SAADEFS */

ULONG APIENTRY GpiQueryPS(HPS hps, PSIZEL psizlSize);
LONG  APIENTRY GpiErrorSegmentData(HPS hps, PLONG plSegment, PLONG plContext);

#ifndef INCL_SAADEFS

LONG APIENTRY GpiQueryDrawControl(HPS hps, LONG lControl);
BOOL APIENTRY GpiSetDrawControl(HPS hps, LONG lControl, LONG lValue);

#endif /* no INCL_SAADEFS */

LONG APIENTRY GpiQueryDrawingMode(HPS hps);
BOOL APIENTRY GpiSetDrawingMode(HPS hps, LONG lMode);

#ifndef INCL_SAADEFS

LONG APIENTRY GpiQueryStopDraw(HPS hps);
BOOL APIENTRY GpiSetStopDraw(HPS hps, LONG lValue);

#endif /* no INCL_SAADEFS */

#endif /* non-common GPICONTROL */
#if (defined(INCL_GPICORRELATION) && !defined(INCL_GPICORRELATION_INCLUDED))
#define INCL_GPICORRELATION_INCLUDED

/* options for GpiSetPickApertureSize */
#define PICKAP_DEFAULT                  0L
#define PICKAP_REC                      2L

/* type of correlation for GpiCorrelateChain */
#define PICKSEL_VISIBLE                 0L
#define PICKSEL_ALL                     1L

/* return code to indicate correlate hit(s) */
#define GPI_HITS                        2L

/*** picking,  correlation and boundary functions */
LONG APIENTRY GpiCorrelateChain(HPS hps, LONG lType, PPOINTL pptlPick,
				LONG lMaxHits, LONG lMaxDepth, PLONG pl2);
BOOL APIENTRY GpiQueryTag(HPS hps, PLONG plTag);
BOOL APIENTRY GpiSetTag(HPS hps, LONG lTag);
BOOL APIENTRY GpiQueryPickApertureSize(HPS hps, PSIZEL psizlSize);
BOOL APIENTRY GpiSetPickApertureSize(HPS hps, LONG lOptions, PSIZEL psizlSize);

#ifndef INCL_SAADEFS

BOOL APIENTRY GpiQueryPickAperturePosition(HPS hps, PPOINTL pptlPoint);
BOOL APIENTRY GpiSetPickAperturePosition(HPS hps, PPOINTL pptlPick);
BOOL APIENTRY GpiQueryBoundaryData(HPS hps, PRECTL prclBoundary);
BOOL APIENTRY GpiResetBoundaryData(HPS hps);

#endif /* no INCL_SAADEFS */

LONG APIENTRY GpiCorrelateFrom(HPS hps, LONG lFirstSegment, LONG lLastSegment,
			       LONG lType, PPOINTL pptlPick, LONG lMaxHits,
			       LONG lMaxDepth, PLONG plSegTag);
LONG APIENTRY GpiCorrelateSegment(HPS hps, LONG lSegment, LONG lType,
				  PPOINTL pptlPick, LONG lMaxHits,
				  LONG lMaxDepth, PLONG alSegTag);

#endif /* non-common_GPICORRELATION */
#if (defined(INCL_GPISEGMENTS) && !defined(INCL_GPISEGMENTS_INCLUDED))
#define INCL_GPISEGMENTS_INCLUDED

/* data formats for GpiPutData and GpiGetData */
#define DFORM_NOCONV		0L

#ifndef INCL_SAADEFS

#define DFORM_S370SHORT 	1L
#define DFORM_PCSHORT		2L
#define DFORM_PCLONG		4L

#endif /* no INCL_SAADEFS */

/* segment attributes used by GpiSet/QuerySegmentAttrs and others */
#define ATTR_ERROR		(-1L)
#define ATTR_DETECTABLE 	1L
#define ATTR_VISIBLE		2L
#define ATTR_CHAINED		6L

#ifndef INCL_SAADEFS

#define ATTR_DYNAMIC		8L

#endif /* no INCL_SAADEFS */

#define ATTR_FASTCHAIN		9L
#define ATTR_PROP_DETECTABLE	10L
#define ATTR_PROP_VISIBLE	11L

/* attribute on/off values */
#define ATTR_OFF		0L
#define ATTR_ON 		1L

/* segment priority used by GpiSetSegmentPriority and others */
#define LOWER_PRI		(-1L)
#define HIGHER_PRI		1L

/*** segment control functions */
BOOL APIENTRY GpiOpenSegment(HPS hps, LONG lSegment);
BOOL APIENTRY GpiCloseSegment(HPS hps);
BOOL APIENTRY GpiDeleteSegment(HPS hps, LONG lSegid);
LONG APIENTRY GpiQueryInitialSegmentAttrs(HPS hps, LONG lAttribute);
BOOL APIENTRY GpiSetInitialSegmentAttrs(HPS hps, LONG lAttribute, LONG lValue);
LONG APIENTRY GpiQuerySegmentAttrs(HPS hps, LONG lSegid, LONG lAttribute);
BOOL APIENTRY GpiSetSegmentAttrs(HPS hps, LONG lSegid, LONG lAttribute,
				 LONG lValue);
LONG APIENTRY GpiQuerySegmentPriority(HPS hps, LONG lRefSegid, LONG lOrder);
BOOL APIENTRY GpiSetSegmentPriority(HPS hps, LONG lSegid, LONG lRefSegid,
				    LONG lOrder);
BOOL APIENTRY GpiDeleteSegments(HPS hps, LONG lFirstSegment, LONG lLastSegment);
LONG APIENTRY GpiQuerySegmentNames(HPS hps, LONG lFirstSegid, LONG lLastSegid,
				   LONG lMax, PLONG alSegids);

/*** draw functions for segments */
LONG APIENTRY GpiGetData(HPS hps, LONG lSegid, PLONG plOffset,
			 LONG lFormat, LONG lLength, PBYTE pbData);
LONG APIENTRY GpiPutData(HPS hps, LONG lFormat, PLONG plCount, PBYTE pbData);
BOOL APIENTRY GpiDrawChain(HPS hps);
BOOL APIENTRY GpiDrawFrom(HPS hps, LONG lFirstSegment, LONG lLastSegment);
BOOL APIENTRY GpiDrawSegment(HPS hps, LONG lSegment);

#ifndef INCL_SAADEFS

BOOL APIENTRY GpiDrawDynamics(HPS hps);
BOOL APIENTRY GpiRemoveDynamics(HPS hps, LONG lFirstSegid, LONG lLastSegid);

#endif /* no INCL_SAADEFS */

#endif /* non-common GPISEGMENTS */
#if (defined(INCL_GPISEGEDITING) && !defined(INCL_GPISEGEDITING_INCLUDED))
#define INCL_GPISEGEDITING_INCLUDED

/* edit modes used by GpiSet/QueryEditMode */
#define SEGEM_ERROR			0L
#define SEGEM_INSERT			1L
#define SEGEM_REPLACE			2L

/*** segment editing by element functions */
BOOL APIENTRY GpiBeginElement(HPS hps, LONG lType, PSZ pszDesc);
BOOL APIENTRY GpiEndElement(HPS hps);
BOOL APIENTRY GpiLabel(HPS hps, LONG lLabel);
LONG APIENTRY GpiElement(HPS hps, LONG lType, PSZ pszDesc,
			 LONG lLength, PBYTE pbData);
LONG APIENTRY GpiQueryElement(HPS hps, LONG lOff, LONG lMaxLength,
			      PBYTE pbData);
BOOL APIENTRY GpiDeleteElement(HPS hps);
BOOL APIENTRY GpiDeleteElementRange(HPS hps, LONG lFirstElement,
				    LONG lLastElement);
BOOL APIENTRY GpiDeleteElementsBetweenLabels(HPS hps, LONG lFirstLabel,
					     LONG lLastLabel);
LONG APIENTRY GpiQueryEditMode(HPS hps);
BOOL APIENTRY GpiSetEditMode(HPS hps, LONG lMode);
LONG APIENTRY GpiQueryElementPointer(HPS hps);
BOOL APIENTRY GpiSetElementPointer(HPS hps, LONG lElement);
BOOL APIENTRY GpiOffsetElementPointer(HPS hps, LONG loffset);
LONG APIENTRY GpiQueryElementType(HPS hps, PLONG plType, LONG lLength,
				  PSZ pszData);
BOOL APIENTRY GpiSetElementPointerAtLabel(HPS hps, LONG lLabel);

#endif /* non-common GPISEGEDITING */
#if (defined(INCL_GPITRANSFORMS) && !defined(INCL_GPITRANSFORMS_INCLUDED))
#define INCL_GPITRANSFORMS_INCLUDED

/* co-ordinates space for GpiConvert */
#define CVTC_WORLD			1L
#define CVTC_MODEL			2L
#define CVTC_DEFAULTPAGE		3L
#define CVTC_PAGE			4L
#define CVTC_DEVICE			5L

/* type of transformation for GpiSetSegmentTransformMatrix */
#define TRANSFORM_REPLACE		0L
#define TRANSFORM_ADD			1L
#define TRANSFORM_PREEMPT		2L

/* transform matrix */
typedef struct _MATRIXLF { /* matlf */
	FIXED fxM11;
	FIXED fxM12;
	LONG  lM13;
	FIXED fxM21;
	FIXED fxM22;
	LONG  lM23;
	LONG  lM31;
	LONG  lM32;
	LONG  lM33;
} MATRIXLF;
typedef MATRIXLF FAR *PMATRIXLF;

#ifndef INCL_DDIDEFS

/*** transform and transform conversion functions */
BOOL APIENTRY GpiQuerySegmentTransformMatrix(HPS hps, LONG lSegid, LONG lCount,
					     PMATRIXLF pmatlfArray);
BOOL APIENTRY GpiSetSegmentTransformMatrix(HPS hps, LONG lSegid, LONG lCount,
					   PMATRIXLF pmatlfarray,
					   LONG lOptions);
BOOL APIENTRY GpiConvert(HPS hps, LONG lSrc, LONG lTarg, LONG lCount,
			 PPOINTL aptlPoints);
BOOL APIENTRY GpiQueryModelTransformMatrix(HPS hps, LONG lCount,
					   PMATRIXLF pmatlfArray);
BOOL APIENTRY GpiSetModelTransformMatrix(HPS hps, LONG lCount,
					 PMATRIXLF pmatlfArray, LONG lOptions);
LONG APIENTRY GpiCallSegmentMatrix(HPS hps, LONG lSegment, LONG lCount,
				   PMATRIXLF pmatlfArray, LONG lOptions);
BOOL APIENTRY GpiQueryDefaultViewMatrix(HPS hps, LONG lCount,
					PMATRIXLF pmatlfArray);
BOOL APIENTRY GpiSetDefaultViewMatrix(HPS hps, LONG lCount,
				      PMATRIXLF pmatlfarray, LONG lOptions);
BOOL APIENTRY GpiQueryPageViewport(HPS hps, PRECTL prclViewport);
BOOL APIENTRY GpiSetPageViewport(HPS hps, PRECTL prclViewport);
BOOL APIENTRY GpiQueryViewingTransformMatrix(HPS hps, LONG lCount,
					     PMATRIXLF pmatlfArray);
BOOL APIENTRY GpiSetViewingTransformMatrix(HPS hps, LONG lCount,
					   PMATRIXLF pmatlfArray,
					   LONG lOptions);

/*** transform helper routines */
BOOL APIENTRY GpiTranslate(HPS, PMATRIXLF, LONG, PPOINTL);
BOOL APIENTRY GpiScale(HPS, PMATRIXLF, LONG, PFIXED, PPOINTL);
BOOL APIENTRY GpiRotate(HPS, PMATRIXLF, LONG, FIXED, PPOINTL);

/*** general clipping functions */
BOOL APIENTRY GpiSetGraphicsField(HPS hps, PRECTL prclField);
BOOL APIENTRY GpiQueryGraphicsField(HPS hps, PRECTL prclField);
BOOL APIENTRY GpiSetViewingLimits(HPS hps, PRECTL prclLimits);
BOOL APIENTRY GpiQueryViewingLimits(HPS hps, PRECTL prclLimits);

#endif /* no INCL_DDIDEFS */

#endif /* non-common GPITRANSFORMS */
#if (defined(INCL_GPIPATHS) && !defined(INCL_GPIPATHS_INCLUDED))
#define INCL_GPIPATHS_INCLUDED

/* modes for GpiModifyPath */
#define MPATH_STROKE			6L

/* modes for GpiFillPath */
#define FPATH_ALTERNATE 		0L
#define FPATH_WINDING			2L

/* modes for GpiSetClipPath */
#define SCP_ALTERNATE			0L
#define SCP_WINDING			2L
#define SCP_AND 			4L
#define SCP_RESET			0L

#ifndef INCL_DDIDEFS

/*** Path and Clip Path functions */
BOOL APIENTRY GpiBeginPath(HPS hps, LONG lPath);
BOOL APIENTRY GpiEndPath(HPS hps);
BOOL APIENTRY GpiCloseFigure(HPS hps);
BOOL APIENTRY GpiModifyPath(HPS hps, LONG lPath, LONG lMode);
LONG APIENTRY GpiFillPath(HPS hps, LONG lPath, LONG lOptions);
BOOL APIENTRY GpiSetClipPath(HPS hps, LONG lPath, LONG lOptions);
LONG APIENTRY GpiOutlinePath(HPS hps, LONG lPath, LONG lOptions);

#ifndef INCL_SAADEFS

LONG APIENTRY GpiStrokePath(HPS hps, LONG lPath, ULONG flOptions);

#endif /* no INCL_SAADEFS */

#endif /* no INCL_DDIDEFS */

#endif /* non-common GPIPATHS */
#if (defined(INCL_GPILOGCOLORTABLE) && !defined(INCL_GPILOGCOLORTABLE_INCLUDED))
#define INCL_GPILOGCOLORTABLE_INCLUDED

/* options for GpiCreateLogColorTable and others */
#define LCOL_RESET		0x0001L
#define LCOL_REALIZABLE 	0x0002L
#define LCOL_PURECOLOR		0x0004L

/* format of logical lColor table for GpiCreateLogColorTable and others */
#define LCOLF_DEFAULT		0L
#define LCOLF_INDRGB		1L
#define LCOLF_CONSECRGB 	2L
#define LCOLF_RGB		3L

/* options for GpiQueryRealColors and others */
#define LCOLOPT_REALIZED	0x0001L
#define LCOLOPT_INDEX		0x0002L

#ifndef INCL_SAADEFS

/* return codes from GpiQueryLogColorTable to indicate it is in RGB mode */
#define QLCT_ERROR		(-1L)
#define QLCT_RGB		(-2L)

/* GpiQueryLogColorTable index returned for colors not explicitly loaded */
#define QLCT_NOTLOADED		(-1L)

#endif /* no INCL_SAADEFS */

/* return codes for GpiQueryColorData */
#define QCD_LCT_FORMAT		0L
#define QCD_LCT_LOINDEX 	1L
#define QCD_LCT_HIINDEX 	2L

#ifndef INCL_DDIDEFS

/*** logical lColor table functions */
BOOL APIENTRY GpiCreateLogColorTable(HPS hps, ULONG flOptions, LONG lFormat,
				     LONG lStart, LONG lCount, PLONG alTable);
BOOL APIENTRY GpiRealizeColorTable(HPS hps);
BOOL APIENTRY GpiUnrealizeColorTable(HPS hps);
BOOL APIENTRY GpiQueryColorData(HPS hps, LONG lCount, PLONG alArray);

#ifndef INCL_SAADEFS

LONG APIENTRY GpiQueryLogColorTable(HPS hps, ULONG flOptions, LONG lStart,
				     LONG lCount, PLONG alArray);

#endif /* no INCL_SAADEFS */

LONG  APIENTRY GpiQueryRealColors(HPS hps, ULONG flOptions, LONG lStart,
				  LONG lCount, PLONG alColors);
LONG  APIENTRY GpiQueryNearestColor(HPS hps, ULONG flOptions, LONG lRgbIn);
LONG  APIENTRY GpiQueryColorIndex(HPS hps, ULONG flOptions, LONG lRgbColor);
LONG  APIENTRY GpiQueryRGBColor(HPS hps, ULONG flOptions, LONG lColorIndex);

#endif /* no INCL_DDIDEFS */

#endif /* non-common GPILOGCOLORTABLE */
#if (defined(INCL_GPIPRIMITIVES) || !defined(INCL_NOCOMMON))

/* default color table indices */

#define CLR_FALSE		(-5L)
#define CLR_TRUE		(-4L)

#define CLR_ERROR		(-255L)
#define CLR_DEFAULT		(-3L)
#define CLR_WHITE		(-2L)
#define CLR_BLACK		(-1L)
#define CLR_BACKGROUND		0L
#define CLR_BLUE		1L
#define CLR_RED 		2L
#define CLR_PINK		3L
#define CLR_GREEN		4L
#define CLR_CYAN		5L
#define CLR_YELLOW		6L
#define CLR_NEUTRAL		7L

#define CLR_DARKGRAY		8L
#define CLR_DARKBLUE		9L
#define CLR_DARKRED		10L
#define CLR_DARKPINK		11L
#define CLR_DARKGREEN		12L
#define CLR_DARKCYAN		13L
#define CLR_BROWN		14L
#define CLR_PALEGRAY		15L

/* rgb colors */
#define RGB_ERROR		(-255L)
#define RGB_BLACK		0x00000000L
#define RGB_BLUE		0x000000FFL
#define RGB_GREEN		0x0000FF00L
#define RGB_CYAN		0x0000FFFFL
#define RGB_RED 		0x00FF0000L
#define RGB_PINK		0x00FF00FFL
#define RGB_YELLOW		0x00FFFF00L
#define RGB_WHITE		0x00FFFFFFL

/* control flags used by GpiBeginArea */
#define BA_NOBOUNDARY		0L
#define BA_BOUNDARY		0x0001L


#define BA_ALTERNATE		0L
#define BA_WINDING		0x0002L


/* fill options for GpiBox/GpiFullArc */
#define DRO_FILL		1L
#define DRO_OUTLINE		2L
#define DRO_OUTLINEFILL 	3L

/* basic pattern symbols */
#define PATSYM_ERROR		(-1L)
#define PATSYM_DEFAULT		0L
#define PATSYM_DENSE1		1L
#define PATSYM_DENSE2		2L
#define PATSYM_DENSE3		3L
#define PATSYM_DENSE4		4L
#define PATSYM_DENSE5		5L
#define PATSYM_DENSE6		6L
#define PATSYM_DENSE7		7L
#define PATSYM_DENSE8		8L
#define PATSYM_VERT		9L
#define PATSYM_HORIZ		10L
#define PATSYM_DIAG1		11L
#define PATSYM_DIAG2		12L
#define PATSYM_DIAG3		13L
#define PATSYM_DIAG4		14L
#define PATSYM_NOSHADE		15L
#define PATSYM_SOLID		16L
#define PATSYM_BLANK		64L
#ifndef INCL_SAADEFS
#define PATSYM_HALFTONE 	17L
#endif /* no INCL_SAADEFS */

/* lcid values for GpiSet/QueryPattern and others */
#define LCID_ERROR		(-1L)
#define LCID_DEFAULT		0L

#ifndef INCL_DDIDEFS

/*** global primitive functions */
BOOL APIENTRY GpiSetColor(HPS hps, LONG lColor);
LONG APIENTRY GpiQueryColor(HPS hps);

/*** line primitive functions */
LONG APIENTRY GpiBox(HPS hps, LONG lControl, PPOINTL pptlPoint,
		      LONG lHRound, LONG lVRound);

BOOL APIENTRY GpiMove(HPS hps, PPOINTL pptlPoint);
LONG APIENTRY GpiLine(HPS hps, PPOINTL pptlEndPoint);
LONG APIENTRY GpiPolyLine(HPS hps, LONG lCount, PPOINTL aptlPoints);

/*** area primitive functions */
BOOL APIENTRY GpiSetPattern(HPS hps, LONG lPatternSymbol);
LONG APIENTRY GpiQueryPattern(HPS hps);
BOOL APIENTRY GpiBeginArea(HPS hps, ULONG flOptions);
LONG APIENTRY GpiEndArea(HPS hps);

/*** character primitive functions */
LONG APIENTRY GpiCharString(HPS hps, LONG lCount, PCH pchString);
LONG APIENTRY GpiCharStringAt(HPS hps, PPOINTL pptlPoint
			     , LONG lCount, PCH pchString);

#endif /* no INCL_DDIDEFS */

#endif /* common GPIPRIMTIVES */
#if (defined(INCL_GPIPRIMITIVES) && !defined(INCL_GPIPRIMITIVES_INCLUDED))
#define INCL_GPIPRIMITIVES_INCLUDED

/* mode for GpiSetAttrMode */
#define AM_ERROR                      (-1L)
#define AM_PRESERVE                     0L
#define AM_NOPRESERVE                   1L

/* foreground mixes */
#define FM_ERROR                      (-1L)
#define FM_DEFAULT                      0L
#define FM_OR                           1L
#define FM_OVERPAINT                    2L
#define FM_LEAVEALONE                   5L


#define FM_XOR                          4L
#define FM_AND                          6L
#define FM_SUBTRACT                     7L
#define FM_MASKSRCNOT                   8L
#define FM_ZERO                         9L
#define FM_NOTMERGESRC                 10L
#define FM_NOTXORSRC                   11L
#define FM_INVERT                      12L
#define FM_MERGESRCNOT                 13L
#define FM_NOTCOPYSRC                  14L
#define FM_MERGENOTSRC                 15L
#define FM_NOTMASKSRC                  16L
#define FM_ONE                         17L


/* background mixes */
#define BM_ERROR                      (-1L)
#define BM_DEFAULT                      0L
#define BM_OVERPAINT                    2L
#define BM_LEAVEALONE                   5L


#define BM_OR                           1L
#define BM_XOR                          4L


/* basic line type styles */
#define LINETYPE_ERROR                (-1L)
#define LINETYPE_DEFAULT                0L
#define LINETYPE_DOT                    1L
#define LINETYPE_SHORTDASH              2L
#define LINETYPE_DASHDOT                3L
#define LINETYPE_DOUBLEDOT              4L
#define LINETYPE_LONGDASH               5L
#define LINETYPE_DASHDOUBLEDOT          6L
#define LINETYPE_SOLID                  7L
#define LINETYPE_INVISIBLE              8L
#ifndef INCL_SAADEFS
#define LINETYPE_ALTERNATE              9L
#endif /* no INCL_SAADEFS */

/* cosmetic line widths */
#define LINEWIDTH_ERROR               (-1L)
#define LINEWIDTH_DEFAULT               0L
#define LINEWIDTH_NORMAL       0x00010000L   /* MAKEFIXED(1,0) */

/* actual line widths */
#define LINEWIDTHGEOM_ERROR           (-1L)

/* line end styles */
#define LINEEND_ERROR                 (-1L)
#define LINEEND_DEFAULT                 0L
#define LINEEND_FLAT                    1L
#define LINEEND_SQUARE                  2L
#define LINEEND_ROUND                   3L

/* line join styles */
#define LINEJOIN_ERROR                (-1L)
#define LINEJOIN_DEFAULT                0L
#define LINEJOIN_BEVEL                  1L
#define LINEJOIN_ROUND                  2L
#define LINEJOIN_MITRE                  3L

/* character directions */
#define CHDIRN_ERROR                  (-1L)
#define CHDIRN_DEFAULT                  0L
#define CHDIRN_LEFTRIGHT                1L
#define CHDIRN_TOPBOTTOM                2L
#define CHDIRN_RIGHTLEFT                3L
#define CHDIRN_BOTTOMTOP                4L

/* character modes */
#define CM_ERROR                      (-1L)
#define CM_DEFAULT                      0L
#define CM_MODE1                        1L
#define CM_MODE2                        2L
#define CM_MODE3                        3L

/* basic marker symbols */
#define MARKSYM_ERROR                 (-1L)
#define MARKSYM_DEFAULT                 0L
#define MARKSYM_CROSS                   1L
#define MARKSYM_PLUS                    2L
#define MARKSYM_DIAMOND                 3L
#define MARKSYM_SQUARE                  4L
#define MARKSYM_SIXPOINTSTAR            5L
#define MARKSYM_EIGHTPOINTSTAR          6L
#define MARKSYM_SOLIDDIAMOND            7L
#define MARKSYM_SOLIDSQUARE             8L
#define MARKSYM_DOT                     9L
#define MARKSYM_SMALLCIRCLE            10L
#define MARKSYM_BLANK                  64L

/* formatting options for GpiCharStringPosAt */
#define CHS_OPAQUE                 0x0001L
#define CHS_VECTOR                 0x0002L
#define CHS_LEAVEPOS               0x0008L
#define CHS_CLIP                   0x0010L

/* bundle codes for GpiSetAttributes and GpiQueryAttributes */
#define PRIM_LINE                       1L
#define PRIM_CHAR                       2L
#define PRIM_MARKER                     3L
#define PRIM_AREA                       4L
#define PRIM_IMAGE                      5L

/* line bundle mask bits */
#define LBB_COLOR                  0x0001L
#define LBB_MIX_MODE               0x0004L
#define LBB_WIDTH                  0x0010L
#define LBB_GEOM_WIDTH             0x0020L
#define LBB_TYPE                   0x0040L
#define LBB_END                    0x0080L
#define LBB_JOIN                   0x0100L

/* character bundle mask bits */
#define CBB_COLOR                  0x0001L
#define CBB_BACK_COLOR             0x0002L
#define CBB_MIX_MODE               0x0004L
#define CBB_BACK_MIX_MODE          0x0008L
#define CBB_SET                    0x0010L
#define CBB_MODE                   0x0020L
#define CBB_BOX                    0x0040L
#define CBB_ANGLE                  0x0080L
#define CBB_SHEAR                  0x0100L
#define CBB_DIRECTION              0x0200L

/* marker bundle mask bits */
#define MBB_COLOR                  0x0001L
#define MBB_BACK_COLOR             0x0002L
#define MBB_MIX_MODE               0x0004L
#define MBB_BACK_MIX_MODE          0x0008L
#define MBB_SET                    0x0010L
#define MBB_SYMBOL                 0x0020L
#define MBB_BOX                    0x0040L

/* pattern bundle mask bits */
#define ABB_COLOR                  0x0001L
#define ABB_BACK_COLOR             0x0002L
#define ABB_MIX_MODE               0x0004L
#define ABB_BACK_MIX_MODE          0x0008L
#define ABB_SET                    0x0010L
#define ABB_SYMBOL                 0x0020L
#define ABB_REF_POINT              0x0040L

/* image bundle mask bits */
#define IBB_COLOR                  0x0001L
#define IBB_BACK_COLOR             0x0002L
#define IBB_MIX_MODE               0x0004L
#define IBB_BACK_MIX_MODE          0x0008L

/* structure for GpiSetArcParams and GpiQueryArcParams */
typedef struct _ARCPARAMS {    /* arcp */
    LONG lP;
    LONG lQ;
    LONG lR;
    LONG lS;
} ARCPARAMS;
typedef ARCPARAMS FAR *PARCPARAMS;

/* variation of SIZE used for FIXEDs */
typedef struct _SIZEF {       /* sizfx */
    FIXED cx;
    FIXED cy;
} SIZEF;
typedef SIZEF FAR *PSIZEF;

/* structure for gradient parameters e.g. for GpiSetCharAngle */
typedef struct _GRADIENTL {     /* gradl */
    LONG x;
    LONG y;
} GRADIENTL;
typedef GRADIENTL FAR *PGRADIENTL;

/* line bundle for GpiSetAttributes and GpiQueryAttributes */
typedef struct _LINEBUNDLE {    /* lbnd */
    LONG    lColor;
    LONG    lReserved;
    USHORT  usMixMode;
    USHORT  usReserved;
    FIXED   fxWidth;
    LONG    lGeomWidth;
    USHORT  usType;
    USHORT  usEnd;
    USHORT  usJoin;
} LINEBUNDLE;

/* character bundle for GpiSetAttrs and GpiQueryAttrs */
typedef struct _CHARBUNDLE {    /* cbnd */
    LONG      lColor;
    LONG      lBackColor;
    USHORT    usMixMode;
    USHORT    usBackMixMode;
    USHORT    usSet;
    USHORT    usPrecision;
    SIZEF     sizfxCell;
    POINTL    ptlAngle;
    POINTL    ptlShear;
    USHORT    usDirection;
} CHARBUNDLE;

/* marker bundle for GpiSetAttributes and GpiQueryAttributes */
typedef struct _MARKERBUNDLE {  /* mbnd */
    LONG   lColor;
    LONG   lBackColor;
    USHORT usMixMode;
    USHORT usBackMixMode;
    USHORT usSet;
    USHORT usSymbol;
    SIZEF  sizfxCell;
} MARKERBUNDLE;

/* pattern bundle for GpiSetAttributes and GpiQueryAttributes */
typedef struct _AREABUNDLE { /* pbnd */
    LONG   lColor;
    LONG   lBackColor;
    USHORT usMixMode;
    USHORT usBackMixMode;
    USHORT usSet;
    USHORT usSymbol;
    POINTL ptlRefPoint ;
} AREABUNDLE;

/* image bundle for GpiSetAttributes and GpiQueryAttributes */
typedef struct _IMAGEBUNDLE {   /* ibmd */
    LONG   lColor;
    LONG   lBackColor;
    USHORT usMixMode;
    USHORT usBackMixMode;
} IMAGEBUNDLE;

/* pointer to any bundle used by GpiSet/QueryAttrs */
typedef PVOID PBUNDLE;

/* array indices for GpiQueryTextBox */
#define TXTBOX_TOPLEFT                  0L
#define TXTBOX_BOTTOMLEFT               1L
#define TXTBOX_TOPRIGHT                 2L
#define TXTBOX_BOTTOMRIGHT              3L
#define TXTBOX_CONCAT                   4L
/* array count for GpiQueryTextBox */
#define TXTBOX_COUNT                    5L

/* return codes for GpiPtVisible */
#define PVIS_ERROR                      0L
#define PVIS_INVISIBLE                  1L
#define PVIS_VISIBLE                    2L

/* return codes for GpiRectVisible */
#define RVIS_ERROR                      0L
#define RVIS_INVISIBLE                  1L
#define RVIS_PARTIAL                    2L
#define RVIS_VISIBLE                    3L

#ifndef INCL_DDIDEFS

/*** attribute mode functions */
BOOL  APIENTRY GpiSetAttrMode( HPS hps, LONG lMode );
LONG  APIENTRY GpiQueryAttrMode( HPS hps );
/*** bundle primitive functions */
BOOL  APIENTRY GpiSetAttrs( HPS hps, LONG lPrimType, ULONG flAttrMask
                          , ULONG flDefMask, PBUNDLE ppbunAttrs );
#ifndef INCL_SAADEFS

LONG  APIENTRY GpiQueryAttrs( HPS hps, LONG lPrimType
                            , ULONG flAttrMask, PBUNDLE ppbunAttrs );

#endif /* no INCL_SAADEFS */

/*** global primitive functions */
BOOL  APIENTRY GpiSetBackColor( HPS hps, LONG lColor );
LONG  APIENTRY GpiQueryBackColor( HPS hps );
BOOL  APIENTRY GpiSetMix( HPS hps, LONG lMixMode );
LONG  APIENTRY GpiQueryMix( HPS hps );
BOOL  APIENTRY GpiSetBackMix( HPS hps, LONG lMixMode );
LONG  APIENTRY GpiQueryBackMix( HPS hps );

/*** line primitive functions */
BOOL  APIENTRY GpiSetLineType( HPS hps, LONG lLineType );
LONG  APIENTRY GpiQueryLineType( HPS hps );
BOOL  APIENTRY GpiSetLineWidth( HPS hps, FIXED fxLineWidth );
FIXED APIENTRY GpiQueryLineWidth( HPS hps );

BOOL  APIENTRY GpiSetLineWidthGeom( HPS hps, LONG lLineWidth );
LONG  APIENTRY GpiQueryLineWidthGeom( HPS hps );
BOOL  APIENTRY GpiSetLineEnd( HPS hps, LONG lLineEnd );
LONG  APIENTRY GpiQueryLineEnd( HPS hps );
BOOL  APIENTRY GpiSetLineJoin( HPS hps, LONG lLineJoin );
LONG  APIENTRY GpiQueryLineJoin( HPS hps );

BOOL  APIENTRY GpiSetCurrentPosition( HPS hps, PPOINTL pptlPoint );
BOOL  APIENTRY GpiQueryCurrentPosition( HPS hps, PPOINTL pptlPoint );

/*** arc primitive functions */
BOOL  APIENTRY GpiSetArcParams( HPS hps, PARCPARAMS parcpArcParams );
BOOL  APIENTRY GpiQueryArcParams( HPS hps, PARCPARAMS parcpArcParams );

LONG  APIENTRY GpiPointArc( HPS hps, PPOINTL pptl2 );

LONG  APIENTRY GpiFullArc( HPS hps, LONG lControl, FIXED fxMultiplier );
LONG  APIENTRY GpiPartialArc( HPS hps, PPOINTL pptlCenter, FIXED fxMultiplier
                            , FIXED fxStartAngle, FIXED fxSweepAngle );
LONG  APIENTRY GpiPolyFillet( HPS hps, LONG lCount, PPOINTL aptlPoints );
LONG  APIENTRY GpiPolySpline( HPS hps, LONG lCount, PPOINTL aptlPoints );
LONG  APIENTRY GpiPolyFilletSharp( HPS hps, LONG lCount, PPOINTL aptlPoints
                                 , PFIXED afxPoints );

/*** area primitive functions */
BOOL  APIENTRY GpiSetPatternSet( HPS hps, LONG lSet );
LONG  APIENTRY GpiQueryPatternSet( HPS hps );
BOOL  APIENTRY GpiSetPatternRefPoint( HPS hps, PPOINTL pptlRefPoint );
BOOL  APIENTRY GpiQueryPatternRefPoint( HPS hps, PPOINTL pptlRefPoint );

/*** character primitive functions */

BOOL  APIENTRY GpiQueryCharStringPos( HPS hps, ULONG flOptions, LONG lCount
                                    , PCH pchString, PLONG alXincrements
                                    , PPOINTL aptlPositions );
BOOL  APIENTRY GpiQueryCharStringPosAt( HPS hps, PPOINTL pptlStart
                                      , ULONG flOptions, LONG lCount
                                      , PCH pchString, PLONG alXincrements
                                      , PPOINTL aptlPositions );
BOOL  APIENTRY GpiQueryTextBox( HPS hps, LONG lCount1, PCH pchString
                              , LONG lCount2, PPOINTL aptlPoints );
BOOL  APIENTRY GpiQueryDefCharBox( HPS hps, PSIZEL psizlSize );
BOOL  APIENTRY GpiSetCharSet( HPS hps, LONG llcid );
LONG  APIENTRY GpiQueryCharSet( HPS hps );
BOOL  APIENTRY GpiSetCharBox( HPS hps, PSIZEF psizfxBox );
BOOL  APIENTRY GpiQueryCharBox( HPS hps, PSIZEF psizfxSize );
BOOL  APIENTRY GpiSetCharAngle( HPS hps, PGRADIENTL pgradlAngle );
BOOL  APIENTRY GpiQueryCharAngle( HPS hps, PGRADIENTL pgradlAngle );
BOOL  APIENTRY GpiSetCharShear( HPS hps, PPOINTL pptlAngle );
BOOL  APIENTRY GpiQueryCharShear( HPS hps, PPOINTL pptlShear );
BOOL  APIENTRY GpiSetCharDirection( HPS hps, LONG lDirection );
LONG  APIENTRY GpiQueryCharDirection( HPS hps );
BOOL  APIENTRY GpiSetCharMode( HPS hps, LONG lMode );
LONG  APIENTRY GpiQueryCharMode( HPS hps );

LONG  APIENTRY GpiCharStringPos( HPS hps, PRECTL prclRect, ULONG flOptions
                               , LONG lCount, PCH pchString, PLONG alAdx );
LONG  APIENTRY GpiCharStringPosAt( HPS hps, PPOINTL pptlStart, PRECTL prclRect
                                 , ULONG flOptions, LONG lCount, PCH pchString
                                 , PLONG alAdx );

/*** marker primitive functions  */
LONG  APIENTRY GpiMarker( HPS hps, PPOINTL pptlPoint );
LONG  APIENTRY GpiPolyMarker( HPS hps, LONG lCount, PPOINTL aptlPoints );
BOOL  APIENTRY GpiSetMarker( HPS hps, LONG lSymbol );
BOOL  APIENTRY GpiSetMarkerBox( HPS hps, PSIZEF psizfxSize );
BOOL  APIENTRY GpiSetMarkerSet( HPS hps, LONG lSet );
LONG  APIENTRY GpiQueryMarker( HPS hps );
BOOL  APIENTRY GpiQueryMarkerBox( HPS hps, PSIZEF psizfxSize );
LONG  APIENTRY GpiQueryMarkerSet( HPS hps );

/*** image primitive functions */
LONG  APIENTRY GpiImage( HPS hps, LONG lFormat, PSIZEL psizlImageSize
                       , LONG lLength, PBYTE pbData );

/*** miscellaneous primitive functions */
BOOL  APIENTRY GpiPop( HPS hps, LONG lCount );
LONG  APIENTRY GpiPtVisible( HPS hps, PPOINTL pptlPoint );
LONG  APIENTRY GpiRectVisible( HPS hps, PRECTL prclRectangle );
BOOL  APIENTRY GpiComment( HPS hps, LONG lLength, PBYTE pbData );

#endif /* no INCL_DDIDEFS */

#endif /* non-common GPIPRIMITIVES */
#if (defined(INCL_GPILCIDS) && !defined(INCL_GPILCIDS_INCLUDED))
#define INCL_GPILCIDS_INCLUDED

/* return codes from GpiCreateLogFont */
#define FONT_DEFAULT                    1L
#define FONT_MATCH                      2L

/* lcid type for GpiQuerySetIds */
#define LCIDT_FONT                      6L

#define LCIDT_BITMAP                    7L

/* constant used to delete all lcids by GpiDeleteSetId */
#define LCID_ALL                      (-1L)

/* kerning data returned by GpiQueryKerningPairs */
typedef struct _KERNINGPAIRS {  /* krnpr */
    SHORT sFirstChar;
    SHORT sSecondChar;
    SHORT sKerningAmount;
} KERNINGPAIRS;
typedef KERNINGPAIRS FAR *PKERNINGPAIRS;

/* options for GpiQueryFonts */
#define QF_PUBLIC                  0x0001L
#define QF_PRIVATE                 0x0002L

#ifndef INCL_SAADEFS

/* font file descriptions for GpiQueryFontFileDescriptions */
typedef CHAR FFDESCS[2][FACESIZE]; /* ffdescs */
typedef FFDESCS FAR *PFFDESCS;

#endif /* no INCL_SAADEFS */

#ifndef INCL_DDIDEFS

/*** physical and logical font functions */
LONG  APIENTRY GpiCreateLogFont( HPS hps, PSTR8 pName, LONG lLcid
                               , PFATTRS pfatAttrs );
BOOL  APIENTRY GpiDeleteSetId( HPS hps, LONG lLcid );
BOOL  APIENTRY GpiLoadFonts( HAB hab, PSZ pszFilename );
BOOL  APIENTRY GpiUnloadFonts( HAB hab, PSZ pszFilename );
LONG  APIENTRY GpiQueryFonts( HPS hps, ULONG flOptions, PSZ pszFacename
                            , PLONG plReqFonts, LONG lMetricsLength
                            , PFONTMETRICS afmMetrics );
BOOL  APIENTRY GpiQueryFontMetrics( HPS hps, LONG lMetricsLength
                                  , PFONTMETRICS pfmMetrics );
LONG  APIENTRY GpiQueryKerningPairs( HPS hps, LONG lCount
                                   , PKERNINGPAIRS akrnprData );
BOOL  APIENTRY GpiQueryWidthTable( HPS hps, LONG lFirstChar, LONG lCount
                                 , PLONG alData );
LONG  APIENTRY GpiQueryNumberSetIds( HPS hps );
BOOL  APIENTRY GpiQuerySetIds( HPS hps, LONG lCount, PLONG alTypes
                             , PSTR8 aNames, PLONG allcids );

#ifndef INCL_SAADEFS
BOOL    APIENTRY GpiSetCp( HPS hps, USHORT usCodePage );
USHORT  APIENTRY GpiQueryCp( HPS hps );
LONG    APIENTRY GpiQueryFontFileDescriptions( HAB hab, PSZ pszFilename
                                             , PLONG plCount
                                             , PFFDESCS affdescsNames );
#endif /* no INCL_SAADEFS */

#endif /* no INCL_DDIDEFS */

#endif /* non-common GPILCIDS */
#if (defined(INCL_GPIBITMAPS) || !defined(INCL_NOCOMMON))

/* rastor operations defined for GpiBitBlt */
#define ROP_SRCCOPY                0x00CCL
#define ROP_SRCPAINT               0x00EEL
#define ROP_SRCAND                 0x0088L
#define ROP_SRCINVERT              0x0066L
#define ROP_SRCERASE               0x0044L
#define ROP_NOTSRCCOPY             0x0033L
#define ROP_NOTSRCERASE            0x0011L
#define ROP_MERGECOPY              0x00C0L
#define ROP_MERGEPAINT             0x00BBL
#define ROP_PATCOPY                0x00F0L
#define ROP_PATPAINT               0x00FBL
#define ROP_PATINVERT              0x005AL
#define ROP_DSTINVERT              0x0055L
#define ROP_ZERO                   0x0000L
#define ROP_ONE                    0x00FFL

/* Blt options for GpiBitBlt */
#define BBO_OR                          0L
#define BBO_AND                         1L
#define BBO_IGNORE                      2L

/* error return for GpiSetBitmap */
#define HBM_ERROR            ((HBITMAP)-1L)

#ifndef INCL_DDIDEFS

/*** bitmap and pel functions */
LONG     APIENTRY GpiBitBlt( HPS hpsTarget, HPS hpsSource, LONG lCount
                           , PPOINTL aptlPoints, LONG lRop, ULONG flOptions );
BOOL     APIENTRY GpiDeleteBitmap( HBITMAP hbm );
HBITMAP  APIENTRY GpiLoadBitmap( HPS hps, HMODULE Resource, USHORT idBitmap
                               , LONG lWidth, LONG lHeight );
HBITMAP  APIENTRY GpiSetBitmap(HPS hps, HBITMAP hbm );
LONG     APIENTRY GpiWCBitBlt( HPS hpsTarget, HBITMAP hbmSource, LONG lCount
                             , PPOINTL aptlPoints, LONG lRop, ULONG flOptions );


#endif /* no INCL_DDIDEFS */

#endif /* common GPIBITMAPS */
#if (defined(INCL_GPIBITMAPS) && !defined(INCL_GPIBITMAPS_INCLUDED))
#define INCL_GPIBITMAPS_INCLUDED

/* usage flags for GpiCreateBitmap */
#define CBM_INIT        0x0004L

/* bitmap parameterization used by GpiCreateBitmap and others */
typedef struct _BITMAPINFOHEADER {      /* bmp */
    ULONG  cbFix;
    USHORT cx;
    USHORT cy;
    USHORT cPlanes;
    USHORT cBitCount;
} BITMAPINFOHEADER;
typedef BITMAPINFOHEADER FAR *PBITMAPINFOHEADER;

/* RGB data for _BITMAPINFO struct */
typedef struct _RGB {           /* rgb */
    BYTE bBlue;
    BYTE bGreen;
    BYTE bRed;
} RGB;

/* bitmap data used by GpiSetBitmapBits and others */
typedef struct _BITMAPINFO {    /* bmi */
    ULONG  cbFix;
    USHORT cx;
    USHORT cy;
    USHORT cPlanes;
    USHORT cBitCount;
    RGB    argbColor[1];
} BITMAPINFO;
typedef BITMAPINFO FAR *PBITMAPINFO;

/* error return code for GpiSet/QueryBitmapBits */
#define BMB_ERROR                     (-1L)

#ifndef INCL_DDIDEFS

/*** bitmap and pel functions */
HBITMAP APIENTRY GpiCreateBitmap( HPS hps, PBITMAPINFOHEADER pbmpNew
                                , ULONG flOptions, PBYTE pbInitData
                                , PBITMAPINFO pbmiInfoTable );
LONG    APIENTRY GpiSetBitmapBits( HPS hps, LONG lScanStart, LONG lScans
                                 , PBYTE pbBuffer, PBITMAPINFO pbmiInfoTable );
BOOL    APIENTRY GpiSetBitmapDimension( HBITMAP hbm, PSIZEL psizlBitmapDimension );
BOOL    APIENTRY GpiSetBitmapId( HPS hps, HBITMAP hbm, LONG lLcid );
LONG    APIENTRY GpiQueryBitmapBits( HPS hps, LONG lScanStart, LONG lScans
                                   , PBYTE pbBuffer, PBITMAPINFO pbmiInfoTable );
BOOL    APIENTRY GpiQueryBitmapDimension( HBITMAP hbm, PSIZEL psizlBitmapDimension );
HBITMAP APIENTRY GpiQueryBitmapHandle( HPS hps, LONG lLcid );
BOOL    APIENTRY GpiQueryBitmapParameters( HBITMAP hbm
                                         , PBITMAPINFOHEADER pbmpData );
BOOL    APIENTRY GpiQueryDeviceBitmapFormats( HPS hps, LONG lCount
                                            , PLONG alArray );

LONG    APIENTRY GpiSetPel( HPS hps, PPOINTL pptlPoint );
LONG    APIENTRY GpiQueryPel( HPS hps, PPOINTL pptlPoint );

#endif /* no INCL_DDIDEFS */

#endif /* non-common GPIBITMAPS */
#if (defined(INCL_GPIREGIONS) && !defined(INCL_GPIREGIONS_INCLUDED))
#define INCL_GPIREGIONS_INCLUDED

/* options for GpiCombineRegion */
#define CRGN_OR                         1L
#define CRGN_COPY                       2L
#define CRGN_XOR                        4L
#define CRGN_AND                        6L
#define CRGN_DIFF                       7L

/* usDirection of returned region data for GpiQueryRegionRects */
#define RECTDIR_LFRT_TOPBOT             1L
#define RECTDIR_RTLF_TOPBOT             2L
#define RECTDIR_LFRT_BOTTOP             3L
#define RECTDIR_RTLF_BOTTOP             4L

/* control data for GpiQueryRegionRects */
typedef struct _RGNRECT {       /* rgnrc */
    USHORT ircStart;
    USHORT crc;
    USHORT crcReturned;
    USHORT usDirection;
} RGNRECT;
typedef RGNRECT FAR *PRGNRECT;

/* return code to indicate type of region for GpiCombineRegion and others */
#define RGN_ERROR                       0L
#define RGN_NULL                        1L
#define RGN_RECT                        2L
#define RGN_COMPLEX                     3L

/* return codes for GpiPtInRegion */
#define PRGN_ERROR                      0L
#define PRGN_OUTSIDE                    1L
#define PRGN_INSIDE                     2L

/* return codes for GpiRectInRegion */
#define RRGN_ERROR                      0L
#define RRGN_OUTSIDE                    1L
#define RRGN_PARTIAL                    2L
#define RRGN_INSIDE                     3L

/* return codes for GpiEqualRegion */
#define EQRGN_ERROR                     0L
#define EQRGN_NOTEQUAL                  1L
#define EQRGN_EQUAL                     2L

/* error return code for GpiSetRegion */
#define HRGN_ERROR              ((HRGN)-1L)

#ifndef INCL_DDIDEFS

/*** main region functions */
LONG  APIENTRY GpiCombineRegion( HPS hps, HRGN hrgnDest, HRGN hrgnSrc1
                               , HRGN hrgnSrc2, LONG lMode );
HRGN  APIENTRY GpiCreateRegion( HPS hps, LONG lCount, PRECTL arclRectangles );
BOOL  APIENTRY GpiDestroyRegion( HPS hps, HRGN hrgn );
LONG  APIENTRY GpiEqualRegion( HPS hps, HRGN hrgnSrc1, HRGN hrgnSrc2 );
BOOL  APIENTRY GpiOffsetRegion( HPS hps, HRGN Hrgn, PPOINTL pptlOffset );
LONG  APIENTRY GpiPaintRegion( HPS hps, HRGN hrgn );
LONG  APIENTRY GpiPtInRegion( HPS hps, HRGN hrgn, PPOINTL pptlPoint );
LONG  APIENTRY GpiQueryRegionBox( HPS hps, HRGN hrgn, PRECTL prclBound );
BOOL  APIENTRY GpiQueryRegionRects( HPS hps, HRGN hrgn, PRECTL prclBound
                                  , PRGNRECT prgnrcControl, PRECTL prclRect );
LONG  APIENTRY GpiRectInRegion( HPS hps, HRGN hrgn, PRECTL prclRect );
BOOL  APIENTRY GpiSetRegion( HPS hps, HRGN hrgn, LONG lcount
                           , PRECTL arclRectangles );

/*** clip region functions */
LONG  APIENTRY GpiSetClipRegion( HPS hps, HRGN hrgn, PHRGN phrgnOld );

#ifndef INCL_SAADEFS

HRGN  APIENTRY GpiQueryClipRegion( HPS hps );
LONG  APIENTRY GpiQueryClipBox( HPS hps, PRECTL prclBound );

#endif /* no INCL_SAADEFS */

LONG  APIENTRY GpiExcludeClipRectangle( HPS hps, PRECTL prclRectangle );
LONG  APIENTRY GpiIntersectClipRectangle( HPS hps, PRECTL prclRectangle );

#ifndef INCL_SAADEFS

LONG  APIENTRY GpiOffsetClipRegion( HPS hps, PPOINTL pptlPoint );

#endif /* no INCL_SAADEFS */

#endif /* no INCL_DDIDEFS */

#endif /* non-common GPIREGIONS */
#if (defined(INCL_GPIMETAFILES) && !defined(INCL_GPIMETAFILES_INCLUDED))
#define INCL_GPIMETAFILES_INCLUDED

#ifndef INCL_DDIDEFS

/* constants for index values of options array for GpiPlayMetafile */
#define PMF_SEGBASE                     0
#define PMF_LOADTYPE                    1
#define PMF_RESOLVE                     2
#define PMF_LCIDS                       3
#define PMF_RESET                       4
#define PMF_SUPPRESS                    5
#define PMF_COLORTABLES                 6
#define PMF_COLORREALIZABLE             7
#define PMF_DEFAULTS                    8

/* options for GpiPlayMetafile */
#define RS_DEFAULT                      0L
#define RS_NODISCARD                    1L
#define LC_DEFAULT                      0L
#define LC_NOLOAD                       1L
#define LC_LOADDISC                     3L
#define LT_DEFAULT                      0L
#define LT_NOMODIFY                     1L
#define LT_ORIGINALVIEW                 4L
#define RES_DEFAULT                     0L
#define RES_NORESET                     1L
#define RES_RESET                       2L
#define SUP_DEFAULT                     0L
#define SUP_NOSUPPRESS                  1L
#define SUP_SUPPRESS                    2L
#define CTAB_DEFAULT                    0L
#define CTAB_NOMODIFY                   1L
#define CTAB_REPLACE                    3L
#define CREA_DEFAULT                    0L
#define CREA_REALIZE                    1L
#define CREA_NOREALIZE                  2L

#ifndef INCL_SAADEFS

#define DDEF_DEFAULT                    0L
#define DDEF_IGNORE                     1L
#define DDEF_LOADDISC                   3L
#define RSP_DEFAULT                     0L
#define RSP_NODISCARD                   1L

#endif /* no INCL_SAADEFS */

/*** metafile functions */
HMF   APIENTRY GpiCopyMetaFile( HMF hmf );
BOOL  APIENTRY GpiDeleteMetaFile( HMF hmf );
HMF   APIENTRY GpiLoadMetaFile( HAB hab, PSZ pszFilename );
LONG  APIENTRY GpiPlayMetaFile( HPS hps, HMF hmf, LONG lCount1
                              , PLONG alOptarray, PLONG plSegCount
                              , LONG lCount2, PSZ pszDesc );
BOOL  APIENTRY GpiQueryMetaFileBits( HMF hmf, LONG lOffset, LONG lLength
                                   , PBYTE pbData );
LONG  APIENTRY GpiQueryMetaFileLength( HMF hmf );
BOOL  APIENTRY GpiSaveMetaFile( HMF hmf, PSZ pszFilename );


#ifndef INCL_SAADEFS

BOOL  APIENTRY GpiSetMetaFileBits( HMF hmf, LONG lOffset, LONG lLength
                                 , PBYTE pbBuffer );

#endif /* no INCL_SAADEFS */

#endif /* no INCL_DDIDEFS */

#endif /* non-common GPIMETAFILES */

#if (defined(INCL_GPIDEFAULTS) && !defined(INCL_GPIDEFAULTS_INCLUDED))
#define INCL_GPIDEFAULTS_INCLUDED

/*** default functions */
BOOL  APIENTRY GpiQueryDefArcParams( HPS hps, PARCPARAMS parcpArcParams );
BOOL  APIENTRY GpiQueryDefAttrs( HPS hps, LONG lPrimType, ULONG flAttrMask
                               , PBUNDLE ppbunAttrs );
BOOL  APIENTRY GpiQueryDefTag( HPS hps, PLONG plTag );
BOOL  APIENTRY GpiQueryDefViewingLimits( HPS hps, PRECTL prclLimits );

BOOL  APIENTRY GpiSetDefArcParams( HPS hps, PARCPARAMS parcpArcParams );
BOOL  APIENTRY GpiSetDefAttrs( HPS hps, LONG lPrimType, ULONG flAttrMask
                             , PBUNDLE ppbunAttrs );
BOOL  APIENTRY GpiSetDefTag( HPS hps, LONG lTag );
BOOL  APIENTRY GpiSetDefViewingLimits( HPS hps, PRECTL prclLimits );


#endif /* GPIDEFAULTS */

#if (defined(INCL_GPIERRORS) && !defined(INCL_GPIERRORS_INCLUDED))
#define INCL_GPIERRORS_INCLUDED

#include <pmerr.h>

#endif /* non-common GPIERRORS */
